package com.ssy.lingxi.pay.service;

import com.ssy.lingxi.pay.api.model.vo.request.ccb.*;

import java.io.UnsupportedEncodingException;
import java.util.Map;

public interface ICcbPayService {

    /**
     * 判断交易订单号是否存在
     * @param payOrderNum       交易订单号
     */
    boolean payOrderExist(String payOrderNum);

    /**
     * 建行B2B普通商户支付
     * @param ccbPayVo 接口请求参数
     * @return 跳转建行html页面
     */
    String b2bPay(CcbB2bPayVo ccbPayVo);

    /**
     * 建行数字人民币支付
     * @param ccbDigitalPayVo 接口请求参数
     * @return 二维码路径
     */
    String digitalPcPay(CcbDigitalPayVo ccbDigitalPayVo);

    /**
     * 建行数字人民币支付
     * @param ccbDigitalPayVo 接口请求参数
     * @return h5页面
     */
    String digitalAppPay(CcbDigitalPayVo ccbDigitalPayVo);

    /**
     * 建行数字人民币支付结果查询
     * @param ccbDigitalPayQueryVo 接口请求参数
     * @return 支付结果，枚举类：CcbDigitalPayResultEnum
     */
    String getDigitalPayResult(CcbDigitalPayQueryVo ccbDigitalPayQueryVo);

    /**
     * 建行数字人民币退款
     * @param digitalRefundVO 接口请求参数
     * @return 成功返回true, 失败直接抛异常
     */
    boolean digitalRefund(DigitalRefundVO digitalRefundVO);

    /**
     * 建行B2B订单支付状态查询
     * @param ccbAccountQueryVo 请求参数
     * @return 查询返回的数据
     */
    String b2bPayStatusQuery(CcbB2bPayQueryVo ccbAccountQueryVo);

    /**
     * 建行B2B普通商户支付回调
     * @param map 建行回调参数
     * @return 验签结果
     */
    boolean b2bPayNotify(Map<String, String> map) throws UnsupportedEncodingException;

    /**
     * 建行数字人民币支付回调
     * @param map 建行回调参数
     * @return 验签结果
     */
    boolean digitalPayNotify(Map<String, String> map) throws UnsupportedEncodingException;

}
